Postgresql configuration
Table of Contents
Section titled “Table of Contents”# 下载 postgres 镜像 $ docker pull postgres $ docker images > REPOSITORY TAG IMAGE ID CREATED SIZE > postgres latest 75b7bff7c3ad 6 weeks ago 425MB # 使用镜像创建容器, 端口映射, 容器名称, 环境变量(密码), 容器时区, 路径映射 # postgres 默认时区是 UTC, 需要设置容器时区为 UTC+8:00 $ docker run \ -p 5432:5432 \ --name postgres \ --restart always \ -e POSTGRES_PASSWORD=root \ -e TZ=Asia/Shanghai \ -v /root/Desktop/Postgres:/var/lib/postgresql/data \ -d postgres # 进入容器 $ docker exec -it postgres bash # 使用 postgres 用户连接数据库 $ psql -U postgres # 查看数据库列表 \l List of databases Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges -----------+----------+----------+-----------------+------------+------------+------------+-----------+----------------------- postgres | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | template0 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/postgres + | | | | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/postgres + | | | | | | | | postgres=CTc/postgres (3 rows)
# 使用 docker-compose.yml 拉起 services: postgres: image: postgres:latest container_name: postgres restart: always ports: - 5432:5432 volumes: - /root/postgres:/var/lib/postgresql/data environment: TZ: Asia/Shanghai POSTGRES_DB: db_name POSTGRES_USER: username POSTGRES_PASSWORD: password
# 进入 postgres 容器 $ docker exec -it postgres bash # pg_dump 备份数据 $ pg_dump -U <username> -d <database name> -f <sql file path> $ pg_dump -U <username> -d <database name> -t <table name> -f <sql file path> $ pg_dump -U postgres -d postgres -t node -f /root/backup_node.sql
PostgreSQL 命令行在处理 SQL 语句时, 不区分大小写, 结尾以分号(;)结尾
psql -h host -p port -U username -d db_name -W password
\? /* 所有命令帮助 */ \l /* 列出所有数据库 */ \d /* 列出数据库中所有表 */ \dt /* 列出数据库中所有表 */ \d [table_name] /* 显示指定表的结构 */ \di /* 列出数据库中所有 index */ \dv /* 列出数据库中所有 view */ \h /* sql命令帮助 */ \q /* 退出连接 */ \c [database_name] /* 切换到指定的数据库 */ \c /* 显示当前数据库名称和用户 */ \conninfo /* 显示客户端的连接信息 */ \du /* 显示所有用户 */ \dn /* 显示数据库中的schema */ \encoding /* 显示字符集 */ select version(); /* 显示版本信息 */ \i test.sql /* 执行sql文件 */ \x /* 扩展展示结果信息,相当于MySQL的\G */ \o /tmp/test.txt /* 将下一条sql执行结果导入文件中 */
修改容器时区
Section titled “修改容器时区”查看 postgres 容器和数据库时区
# 查看容器内时区 $ date -R > Thu, 18 Apr 2024 21:13:38 +0800 # 查看 postgres 数据库时区 postgres=# SHOW TIMEZONE; TimeZone --------------- Asia/Shanghai # 查看 postgres 数据库当前时间 postgres=# SELECT current_timestamp; current_timestamp ------------------------------- 2024-04-18 21:17:02.490132+08
修改 postgres 容器和数据库时区
# 进入容器内, 创建备份, 修改时区 $ cp /etc/localtime /etc/localtime.bak $ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime $ psql -U postgres postgres=# SHOW config_file; config_file ------------------------------------------ /var/lib/postgresql/data/postgresql.conf # 修改 postgresql.conf 文件中 log_timezone, timezone 值 log_timezone = 'Asia/Shanghai' timezone = 'Asia/Shanghai' # 退出容器后, 重启 postgres 容器 $ docker restart postgres